package com.aliwo.reflect;

import com.aliwo.Cat;

import java.lang.reflect.Field;

/**
 * Class常用方法.
 *
 * @author Xu Yayuan
 * @date 2022/2/20
 */
public class Class02 {
    public static void main(String[] args) throws Exception{
        Class<?> cls = Class.forName("com.aliwo.Cat");
        System.out.println("cls:" + cls); // 显示cls对象，是哪个类的Class对象 com.aliwo.Cat
        System.out.println("cls对象，运行类型:" + cls.getClass()); // java.lang.Class
        // 得到包名
        System.out.println("包名:" + cls.getPackage().getName()); // com.aliwo
        // 得到全类名
        System.out.println("全类名:" + cls.getName()); // com.aliwo.Cat
        // 得到类名
        System.out.println("全类名:" + cls.getSimpleName()); // Cat
        // 通过cls创建对象实例
        Cat cat = (Cat) cls.newInstance();
        System.out.println("cat:" + cat);
        // 通过反射获取属性
        Field ageField = cls.getField("age");
        System.out.println("ageField:" + ageField.get(cat)); // 传统掉属性值，对象.get属性名，反射 属性名.get(对象) 100
        // 通过反射设置属性值
        ageField.set(cat, 120);
        System.out.println("ageField 从 100修改为 120:" + ageField.get(cat)); // 120
        // 获取所有的属性字段通过反射,只能获取公共的属性字段
        Field[] fields = cls.getFields();
        for (Field field : fields) {
            System.out.println("字段：" + field.getName());
        }
    }
}
